地图手势事件监听 Sample详情

最后更新时间:2019年7月5日

当对地图进行单击、双击、长按等操作时,MapView地图控件能够监听到这些手势事件,捕捉到相应的触摸点并响应,提供监听事件:单击监听、双击监听、长按监听,在回调方法中返回坐标信息供用户使用。

这些手势事件在实际中应用非常广泛,多用于交互操作。例如,在地图上交互式绘制图形、交互式查询要素、交互式编辑要素等。常见的用法为:为地图视图设置代理协议,然后实现其提供的回调函数,在其中获取坐标信息,然后以此绘制点/标注/图片/文字等,多次点击之后,可将获取到的多个点连成线或者区,达到用户需要的交互式绘制效果。

单击监听、双击监听、长按监听都由MapViewDelegate地图控件代理协议提供,在使用之前,需使ViewController遵守协议,然后为MGSMapView对象设置协议,最后实现其回调函数,核心代码如下:

@interface GestureListen_ViewController ()<MapViewDelegate>
_mapView.delegate = self;

1 单击事件监听

监听用户对地图进行的单击手势事件,返回单击点的坐标信息。

//地图单击事件监听
-(void)tapWithPoint:(CGPoint) viewPoint mapView:(MGSMapView*) mapView
{
    MGSDot point = [_mapView viewPointToMapPoint:viewPoint];  //视图坐标转换为地图坐标
}

代码说明:回调函数中的坐标点的坐标系是视图坐标系,如果需要获取地图坐标,需调用MGSMapView类的viewPointToMapPoint方法进行转换。

2 双击事件监听

监听用户对地图进行的双击手势事件。

//地图双击事件监听
-(BOOL)doubleTapWithPoint:(CGPoint) viewPoint mapView:(MGSMapView*) mapView
{
    MGSDot point = [_mapView viewPointToMapPoint:viewPoint];  //视图坐标转换为地图坐标
    return YES;
}

代码说明:地图双击事件监听器的回调函数具有返回值:如果返回true,表示消费了该事件,不会继续触发地图的单击Tap事件;如果返回false,则表示没有消费该事件,会继续触发地图的单击Tap事件。后续的地图长按事件中回调函数的返回值的作用与此相同。

3 长按事件监听

监听用户对地图进行的长按手势事件。

//地图长按事件监听
-(BOOL)longTapWithPoint:(CGPoint) viewPoint mapView:(MGSMapView*) mapView
{
    MGSDot point = [_mapView viewPointToMapPoint:viewPoint];  //视图坐标转换为地图坐标
    return YES;
}

地图手势事件监听.jpg